பைத்தானில் Requests அமர்வு மேலாண்மை மூலம் HTTP இணைப்பு மறுபயன்பாட்டை திறம்பட பயன்படுத்தி, செயல்திறனை மேம்படுத்தி, தாமதத்தைக் குறைத்திடுங்கள். உலகளாவிய பயன்பாடுகளுக்கான சிறந்த நடைமுறைகளை அறிக.
Requests அமர்வு மேலாண்மை: உகந்த செயல்திறனுக்காக HTTP இணைப்பு மறுபயன்பாட்டை திறம்பட கையாளுதல்
வலை மேம்பாடு மற்றும் API ஒருங்கிணைப்பு உலகில், செயல்திறன் மிகவும் முக்கியமானது. பல HTTP கோரிக்கைகளைக் கையாளும் போது, இணைப்பு மேலாண்மையை மேம்படுத்துவது செயல்திறனை கணிசமாக பாதிக்கும். பைதான் requests நூலகம் அமர்வு மேலாண்மை எனப்படும் சக்திவாய்ந்த அம்சத்தை வழங்குகிறது, இது HTTP இணைப்பு மறுபயன்பாட்டை செயல்படுத்துகிறது, இது வேகமான பதிலளிப்பு நேரங்களையும் குறைக்கப்பட்ட சர்வர் சுமையையும் விளைவிக்கிறது. இந்த கட்டுரை Requests அமர்வு மேலாண்மையின் சிக்கல்களை ஆராய்ந்து, உலகளாவிய பயன்பாடுகளுக்கு அதன் நன்மைகளைப் பயன்படுத்துவதற்கான ஒரு விரிவான வழிகாட்டலை வழங்குகிறது.
HTTP இணைப்பு மறுபயன்பாடு என்றால் என்ன?
HTTP இணைப்பு மறுபயன்பாடு, HTTP Keep-Alive என்றும் அழைக்கப்படுகிறது, இது பல HTTP கோரிக்கைகள் மற்றும் பதில்களை ஒற்றை TCP இணைப்பு வழியாக அனுப்ப அனுமதிக்கும் ஒரு நுட்பமாகும். இணைப்பு மறுபயன்பாடு இல்லாமல், ஒவ்வொரு கோரிக்கைக்கும் ஒரு புதிய TCP இணைப்பு நிறுவப்பட வேண்டும், இது ஒரு கைக்குலுக்கலை உள்ளடக்கியது மற்றும் மதிப்புமிக்க நேரத்தையும் வளங்களையும் பயன்படுத்துகிறது. இணைப்புகளை மீண்டும் பயன்படுத்துவதன் மூலம், இணைப்புகளை மீண்டும் மீண்டும் நிறுவுதல் மற்றும் நீக்குதல் ஆகியவற்றின் கூடுதல் செலவை (overhead) தவிர்க்கிறோம், இது கணிசமான செயல்திறன் ஆதாயங்களுக்கு வழிவகுக்கிறது, குறிப்பாக பல சிறிய கோரிக்கைகளைச் செய்யும்போது.
நீங்கள் ஒரு API முனையத்திலிருந்து பல முறை தரவை மீட்டெடுக்க வேண்டிய ஒரு காட்சியைப் பரிசீலించండి. இணைப்பு மறுபயன்பாடு இல்லாமல், ஒவ்வொரு மீட்டெடுப்பிற்கும் ஒரு தனி இணைப்பு தேவைப்படும். Alpha Vantage அல்லது Open Exchange Rates போன்ற உலகளாவிய நிதி API இலிருந்து நாணய மாற்று விகிதங்களை மீட்டெடுப்பதாக கற்பனை செய்து பாருங்கள். நீங்கள் பல நாணய ஜோடிகளுக்கான விகிதங்களை மீண்டும் மீண்டும் மீட்டெடுக்க வேண்டியிருக்கலாம். இணைப்பு மறுபயன்பாட்டுடன், requests நூலகம் இணைப்பை உயிருடன் வைத்திருக்க முடியும், இது கூடுதல் செலவை (overhead) கணிசமாக குறைக்கும்.
Requests அமர்வு பொருளை அறிமுகப்படுத்துதல்
requests நூலகம் ஒரு Session பொருளை வழங்குகிறது, இது இணைப்பு குளம் மற்றும் மறுபயன்பாட்டை தானாகவே கையாளுகிறது. நீங்கள் ஒரு Session பொருளை உருவாக்கும் போது, அது HTTP இணைப்புகளின் ஒரு குளத்தை பராமரிக்கிறது, அதே ஹோஸ்டுக்கு அடுத்தடுத்த கோரிக்கைகளுக்கு அவற்றை மீண்டும் பயன்படுத்துகிறது. இது இணைப்புகளை கைமுறையாக நிர்வகிக்கும் செயல்முறையை எளிதாக்குகிறது மற்றும் கோரிக்கைகள் திறமையாக கையாளப்படுவதை உறுதி செய்கிறது.
Session பொருளைப் பயன்படுத்துவதற்கான ஒரு அடிப்படை எடுத்துக்காட்டு இங்கே:
import requests
# Create a session object
session = requests.Session()
# Make a request using the session
response = session.get('https://www.example.com')
# Process the response
print(response.status_code)
print(response.content)
# Make another request to the same host
response = session.get('https://www.example.com/another_page')
# Process the response
print(response.status_code)
print(response.content)
# Close the session (optional, but recommended)
session.close()
இந்த எடுத்துக்காட்டில், Session பொருள் https://www.example.com க்குச் செல்லும் இரண்டு கோரிக்கைகளுக்கும் ஒரே இணைப்பை மீண்டும் பயன்படுத்துகிறது. session.close() முறை அமர்வை வெளிப்படையாக மூடுகிறது, வளங்களை விடுவிக்கிறது. அமர்வு பொதுவாக குப்பை சேகரிப்பு (garbage collection) மூலம் தன்னைத்தானே சுத்தம் செய்து கொண்டாலும், குறிப்பாக நீண்ட நேரம் இயங்கும் பயன்பாடுகள் அல்லது வரையறுக்கப்பட்ட வளங்களைக் கொண்ட சூழல்களில், வள மேலாண்மைக்கு அமர்வை வெளிப்படையாக மூடுவது ஒரு சிறந்த நடைமுறையாகும்.
அமர்வுகளைப் பயன்படுத்துவதன் நன்மைகள்
- மேம்படுத்தப்பட்ட செயல்திறன்: இணைப்பு மறுபயன்பாடு தாமதத்தைக் குறைத்து பதிலளிப்பு நேரங்களை மேம்படுத்துகிறது, குறிப்பாக ஒரே ஹோஸ்டுக்கு பல கோரிக்கைகளைச் செய்யும் பயன்பாடுகளுக்கு.
- எளிமைப்படுத்தப்பட்ட குறியீடு:
Sessionபொருள் இணைப்பு மேலாண்மையை எளிதாக்குகிறது, இணைப்பு விவரங்களை கைமுறையாகக் கையாள வேண்டிய தேவையை நீக்குகிறது. - குக்கீ நிலைத்தன்மை: அமர்வுகள் குக்கீகளை தானாகவே கையாளுகின்றன, பல கோரிக்கைகளில் அவற்றை நிலைநிறுத்துகின்றன. வலை பயன்பாடுகளில் நிலையை பராமரிக்க இது மிகவும் முக்கியமானது.
- இயல்புநிலை தலைப்புகள்: அமர்வுக்குள் செய்யப்படும் அனைத்து கோரிக்கைகளுக்கும் இயல்புநிலை தலைப்புகளை அமைக்கலாம், இது நிலைத்தன்மையை உறுதிசெய்து குறியீட்டு நகலை (code duplication) குறைக்கிறது.
- இணைப்பு குளம்: Request-கள் இணைப்பு மறுபயன்பாட்டை மேலும் மேம்படுத்தும் இணைப்பு குளத்தை (connection pooling) உள்ளே பயன்படுத்துகிறது.
உகந்த செயல்திறனுக்காக அமர்வுகளை உள்ளமைத்தல்
Session பொருள் தானியங்கி இணைப்பு மறுபயன்பாட்டை வழங்கினாலும், குறிப்பிட்ட சூழ்நிலைகளில் உகந்த செயல்திறனுக்காக அதன் உள்ளமைவை நீங்கள் சரிசெய்யலாம். சில முக்கிய உள்ளமைவு விருப்பங்கள் இங்கே:
1. அடாப்டர்கள் (Adapters)
அடாப்டர்கள் requests பல்வேறு நெறிமுறைகளை எவ்வாறு கையாளுகிறது என்பதைத் தனிப்பயனாக்க உங்களை அனுமதிக்கின்றன. requests நூலகம் HTTP மற்றும் HTTPS க்கான உள்ளமைக்கப்பட்ட அடாப்டர்களைக் கொண்டுள்ளது, ஆனால் நீங்கள் மேலும் சிறப்புச் சூழ்நிலைகளுக்கு தனிப்பயன் அடாப்டர்களை உருவாக்கலாம். எடுத்துக்காட்டாக, நீங்கள் ஒரு குறிப்பிட்ட SSL சான்றிதழைப் பயன்படுத்தலாம் அல்லது சில கோரிக்கைகளுக்கான ப்ராக்ஸி அமைப்புகளை உள்ளமைக்கலாம். இணைப்புகள் எவ்வாறு நிறுவப்பட்டு நிர்வகிக்கப்படுகின்றன என்பதற்கான குறைந்த-நிலை கட்டுப்பாட்டை அடாப்டர்கள் உங்களுக்கு வழங்குகின்றன.
ஒரு குறிப்பிட்ட SSL சான்றிதழை உள்ளமைக்க ஒரு அடாப்டரைப் பயன்படுத்துவதற்கான எடுத்துக்காட்டு இங்கே:
import requests
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry
# Create a session object
session = requests.Session()
# Configure retry strategy
retries = Retry(total=5, backoff_factor=0.1, status_forcelist=[500, 502, 503, 504])
# Create an adapter with retry configuration
adapter = HTTPAdapter(max_retries=retries)
# Mount the adapter to the session for both HTTP and HTTPS
session.mount('http://', adapter)
session.mount('https://', adapter)
# Make a request using the session
try:
response = session.get('https://www.example.com')
response.raise_for_status() # Raise HTTPError for bad responses (4xx or 5xx)
# Process the response
print(response.status_code)
print(response.content)
except requests.exceptions.RequestException as e:
print(f"An error occurred: {e}")
# Close the session
session.close()
இந்த எடுத்துக்காட்டு HTTPAdapter ஐப் பயன்படுத்தி ஒரு மறுமுயற்சி உத்தியை (retry strategy) உள்ளமைக்கிறது, இது தோல்வியுற்ற கோரிக்கைகளை தானாகவே மீண்டும் முயற்சிக்கிறது. நம்பகத்தன்மையற்ற பிணைய இணைப்புகள் அல்லது தற்காலிக செயலிழப்புகளை அனுபவிக்கக்கூடிய சேவைகளைக் கையாளும் போது இது மிகவும் பயனுள்ளதாக இருக்கும். Retry பொருள் அதிகபட்ச மறுமுயற்சிகளின் எண்ணிக்கை மற்றும் பின்னோக்கிச் செல்லும் காரணி (backoff factor) போன்ற மறுமுயற்சி அளவுருக்களை வரையறுக்கிறது.
2. இணைப்பு குளம் அமைப்புகள் (pool_connections, pool_maxsize, max_retries)
requests நூலகம் இணைப்பு குளத்திற்கு urllib3 ஐப் பயன்படுத்துகிறது. HTTPAdapter வழியாக குளம் அளவு மற்றும் பிற அளவுருக்களை நீங்கள் கட்டுப்படுத்தலாம். pool_connections அளவுரு தேக்கி வைக்க வேண்டிய இணைப்புகளின் எண்ணிக்கையைக் குறிப்பிடுகிறது, அதே நேரத்தில் pool_maxsize அளவுரு குளத்தில் வைத்திருக்க வேண்டிய அதிகபட்ச இணைப்புகளின் எண்ணிக்கையைக் குறிப்பிடுகிறது. இந்த அளவுருக்களை சரியாக அமைப்பது புதிய இணைப்புகளை உருவாக்கும் கூடுதல் செலவை (overhead) குறைப்பதன் மூலம் செயல்திறனை மேம்படுத்தலாம்.
முந்தைய எடுத்துக்காட்டில் காட்டியபடி, max_retries அளவுரு ஒரு தோல்வியுற்ற கோரிக்கை எத்தனை முறை மீண்டும் முயற்சிக்கப்பட வேண்டும் என்பதை உள்ளமைக்கிறது. நிலையற்ற பிணைய பிழைகள் அல்லது சர்வர் பக்க சிக்கல்களைக் கையாள இது மிகவும் முக்கியமானது.
இணைப்பு குளம் அமைப்புகளை உள்ளமைப்பதற்கான எடுத்துக்காட்டு இங்கே:
import requests
from requests.adapters import HTTPAdapter
from urllib3 import PoolManager
class SourceAddressAdapter(HTTPAdapter):
def __init__(self, source_address, **kwargs):
self.source_address = source_address
super(SourceAddressAdapter, self).__init__(**kwargs)
def init_poolmanager(self, connections, maxsize, block=False):
self.poolmanager = PoolManager(num_pools=connections,maxsize=maxsize,block=block, source_address=self.source_address)
# Create a session object
session = requests.Session()
# Configure connection pooling settings
adapter = SourceAddressAdapter(('192.168.1.100', 0), pool_connections=20, pool_maxsize=20)
session.mount('http://', adapter)
session.mount('https://', adapter)
# Make a request using the session
response = session.get('https://www.example.com')
# Process the response
print(response.status_code)
print(response.content)
# Close the session
session.close()
இந்த எடுத்துக்காட்டு இணைப்பு குளத்தை 20 இணைப்புகளைப் பயன்படுத்தவும், அதிகபட்ச குளம் அளவு 20 ஆகவும் உள்ளமைக்கிறது. இந்த மதிப்புகளை சரிசெய்வது உங்கள் பயன்பாடு செய்யும் ஒருமித்த கோரிக்கைகளின் எண்ணிக்கை மற்றும் உங்கள் கணினியில் கிடைக்கும் வளங்களைப் பொறுத்தது.
3. நேர அளவு (Timeout) உள்ளமைவு
ஒரு சர்வர் மெதுவாக பதிலளிக்கும் போது அல்லது கிடைக்காதபோது உங்கள் பயன்பாடு காலவரையின்றி முடங்குவதைத் தடுக்க பொருத்தமான நேர அளவுகளை (timeouts) அமைப்பது மிகவும் முக்கியம். requests முறைகளில் (get, post, போன்றவை) உள்ள timeout அளவுரு சர்வரிடமிருந்து ஒரு பதிலுக்காக காத்திருக்க வேண்டிய அதிகபட்ச நேரத்தைக் குறிப்பிடுகிறது.
நேர அளவை அமைப்பதற்கான எடுத்துக்காட்டு இங்கே:
import requests
# Create a session object
session = requests.Session()
# Make a request with a timeout
try:
response = session.get('https://www.example.com', timeout=5)
# Process the response
print(response.status_code)
print(response.content)
except requests.exceptions.Timeout as e:
print(f"Request timed out: {e}")
# Close the session
session.close()
இந்த எடுத்துக்காட்டில், சர்வர் பதிலளிக்கவில்லை என்றால் 5 விநாடிகளுக்குப் பிறகு கோரிக்கை காலாவதியாகும். requests.exceptions.Timeout விதிவிலக்கைக் கையாள்வது, நேர அளவு சூழ்நிலைகளை மென்மையாகக் கையாளவும், உங்கள் பயன்பாடு முடங்குவதைத் தடுக்கவும் உங்களை அனுமதிக்கிறது.
4. இயல்புநிலை தலைப்புகளை அமைத்தல்
அந்த அமர்வு மூலம் செய்யப்படும் ஒவ்வொரு கோரிக்கையிலும் சேர்க்கப்படும் இயல்புநிலை தலைப்புகளை அமைக்க அமர்வுகள் உங்களை அனுமதிக்கின்றன. அங்கீகார டோக்கன்கள், API சாவிகள் அல்லது தனிப்பயன் பயனர் முகவர்கள் ஆகியவற்றை அமைக்க இது உதவியாக இருக்கும். இயல்புநிலை தலைப்புகளை அமைப்பது நிலைத்தன்மையை உறுதிசெய்து குறியீட்டு நகலை (code duplication) குறைக்கிறது.
இயல்புநிலை தலைப்புகளை அமைப்பதற்கான எடுத்துக்காட்டு இங்கே:
import requests
# Create a session object
session = requests.Session()
# Set default headers
session.headers.update({
'Authorization': 'Bearer YOUR_API_KEY',
'User-Agent': 'MyCustomApp/1.0'
})
# Make a request using the session
response = session.get('https://www.example.com')
# Process the response
print(response.status_code)
print(response.content)
# Close the session
session.close()
இந்த எடுத்துக்காட்டில், Authorization மற்றும் User-Agent தலைப்புகள் அமர்வு மூலம் செய்யப்படும் ஒவ்வொரு கோரிக்கையிலும் சேர்க்கப்படும். YOUR_API_KEY ஐ உங்கள் உண்மையான API சாவியுடன் மாற்றவும்.
அமர்வுகளுடன் குக்கீகளைக் கையாளுதல்
அமர்வுககள் குக்கீகளை தானாகவே கையாளுகின்றன, பல கோரிக்கைகளில் அவற்றை நிலைநிறுத்துகின்றன. அங்கீகாரத்திற்காக அல்லது பயனர் அமர்வுகளைக் கண்காணிக்க குக்கீகளை நம்பியிருக்கும் வலை பயன்பாடுகளில் நிலையை பராமரிக்க இது அவசியம். ஒரு சர்வர் பதிலில் ஒரு Set-Cookie தலைப்பை அனுப்பும் போது, அமர்வு குக்கீயைச் சேமித்து, அதே டொமைனுக்கு அடுத்தடுத்த கோரிக்கைகளில் அதைச் சேர்க்கிறது.
அமர்வுககள் குக்கீகளை எவ்வாறு கையாளுகின்றன என்பதற்கான எடுத்துக்காட்டு இங்கே:
import requests
# Create a session object
session = requests.Session()
# Make a request to a site that sets cookies
response = session.get('https://www.example.com/login')
# Print the cookies set by the server
print(session.cookies.get_dict())
# Make another request to the same site
response = session.get('https://www.example.com/profile')
# The cookies are automatically included in this request
print(response.status_code)
# Close the session
session.close()
இந்த எடுத்துக்காட்டில், https://www.example.com/login ஆல் அமைக்கப்பட்ட குக்கீகளை https://www.example.com/profile க்கு அடுத்தடுத்த கோரிக்கையில் அமர்வு தானாகவே சேமித்து சேர்க்கிறது.
அமர்வு மேலாண்மைக்கான சிறந்த நடைமுறைகள்
- பல கோரிக்கைகளுக்கு அமர்வுகளைப் பயன்படுத்தவும்: ஒரே ஹோஸ்டுக்கு பல கோரிக்கைகளைச் செய்யும்போது எப்போதும் ஒரு
Sessionபொருளைப் பயன்படுத்தவும். இது இணைப்பு மறுபயன்பாட்டை உறுதிசெய்து செயல்திறனை மேம்படுத்துகிறது. - அமர்வுகளை வெளிப்படையாக மூடவும்: அமர்வுகளைப் பயன்படுத்தி முடிந்ததும்
session.close()ஐப் பயன்படுத்தி அமர்வுகளை வெளிப்படையாக மூடவும். இது வளங்களை விடுவித்து, இணைப்பு கசிவுகள் (connection leaks) பற்றிய சாத்தியமான சிக்கல்களைத் தடுக்கிறது. - குறிப்பிட்ட தேவைகளுக்கு அடாப்டர்களை உள்ளமைக்கவும்:
requestsபல்வேறு நெறிமுறைகளை எவ்வாறு கையாளுகிறது என்பதைத் தனிப்பயனாக்கவும், உகந்த செயல்திறனுக்காக இணைப்பு குளம் அமைப்புகளை உள்ளமைக்கவும் அடாப்டர்களைப் பயன்படுத்தவும். - நேர அளவுகளை அமைக்கவும்: ஒரு சர்வர் மெதுவாக பதிலளிக்கும் போது அல்லது கிடைக்காதபோது உங்கள் பயன்பாடு காலவரையின்றி முடங்குவதைத் தடுக்க எப்போதும் நேர அளவுகளை அமைக்கவும்.
- விதிவிலக்குகளைக் கையாளவும்:
requests.exceptions.RequestExceptionமற்றும்requests.exceptions.Timeoutபோன்ற விதிவிலக்குகளை சரியாகக் கையாளவும், பிழைகளை மென்மையாகக் கையாளவும் மற்றும் உங்கள் பயன்பாடு செயலிழப்பதைத் தடுக்கவும். - நூல் பாதுகாப்பு (Thread Safety) கருத்தில் கொள்ளவும்:
Sessionபொருள் பொதுவாக நூல்-பாதுகாப்பானது (thread-safe), ஆனால் சரியான ஒத்திசைவு இல்லாமல் பல நூல்களில் (threads) ஒரே அமர்வைப் பகிர்வதைத் தவிர்க்கவும். ஒவ்வொரு நூலுக்கும் தனித்தனி அமர்வுகளை உருவாக்குவதையோ அல்லது நூல்-பாதுகாப்பான இணைப்பு குளத்தைப் பயன்படுத்துவதையோ கருத்தில் கொள்ளவும். - இணைப்பு குளம் பயன்பாட்டைக் கண்காணிக்கவும்: சாத்தியமான சிக்கல்களை (bottlenecks) கண்டறியவும், அதற்கேற்ப குளம் அளவை சரிசெய்யவும் இணைப்பு குளம் பயன்பாட்டைக் கண்காணிக்கவும்.
- நிலைத்த அமர்வுகளைப் பயன்படுத்தவும்: நீண்ட நேரம் இயங்கும் பயன்பாடுகளுக்கு, இணைப்பு தகவலை வட்டில் சேமிக்கும் நிலைத்த அமர்வுகளைப் (persistent sessions) பயன்படுத்துவதைக் கருத்தில் கொள்ளவும். இது மறுதொடக்கம் செய்யப்பட்ட பிறகு இணைப்புகளை மீண்டும் தொடங்க பயன்பாட்டை அனுமதிக்கிறது. இருப்பினும், பாதுகாப்பு தாக்கங்கள் குறித்து கவனமாக இருங்கள் மற்றும் நிலைத்த அமர்வுகளில் சேமிக்கப்பட்ட முக்கியமான தரவைப் பாதுகாக்கவும்.
மேம்பட்ட அமர்வு மேலாண்மை நுட்பங்கள்
1. ஒரு சூழல் மேலாளரைப் (Context Manager) பயன்படுத்துதல்
Session பொருளை ஒரு சூழல் மேலாளராகப் பயன்படுத்தலாம், with தொகுதி வெளியேற்றப்படும்போது அமர்வு தானாகவே மூடப்படுவதை உறுதி செய்கிறது. இது வள மேலாண்மையை எளிதாக்குகிறது மற்றும் அமர்வை மூட மறக்கும் அபாயத்தைக் குறைக்கிறது.
import requests
# Use the session as a context manager
with requests.Session() as session:
# Make a request using the session
response = session.get('https://www.example.com')
# Process the response
print(response.status_code)
print(response.content)
# The session is automatically closed when the 'with' block is exited
2. பின்னோக்கிச் செல்லலுடன் (Backoff) அமர்வு மறுமுயற்சிகள்
நிலையற்ற பிணைய பிழைகளை மேலும் மென்மையாகக் கையாள, அடுக்குப் பின்னோக்கிச் செல்லலுடன் (exponential backoff) மறுமுயற்சிகளை நீங்கள் செயல்படுத்தலாம். இது தோல்வியுற்ற கோரிக்கைகளை மறுமுயற்சிகளுக்கு இடையில் அதிகரிக்கும் தாமதங்களுடன் மீண்டும் முயற்சிப்பதை உள்ளடக்கியது, இது சர்வரில் உள்ள சுமையைக் குறைத்து வெற்றியின் வாய்ப்புகளை அதிகரிக்கிறது.
import requests
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry
# Create a session object
session = requests.Session()
# Configure retry strategy
retries = Retry(total=5, backoff_factor=0.1, status_forcelist=[500, 502, 503, 504])
# Create an adapter with retry configuration
adapter = HTTPAdapter(max_retries=retries)
# Mount the adapter to the session for both HTTP and HTTPS
session.mount('http://', adapter)
session.mount('https://', adapter)
# Make a request using the session
try:
response = session.get('https://www.example.com')
response.raise_for_status() # Raise HTTPError for bad responses (4xx or 5xx)
# Process the response
print(response.status_code)
print(response.content)
except requests.exceptions.RequestException as e:
print(f"An error occurred: {e}")
# The session is automatically closed when the 'with' block is exited (if not using context manager)
session.close()
3. அமர்வுகளுடன் ஒத்திசைவற்ற கோரிக்கைகள் (Asynchronous Requests)
உயர்-செயல்திறன் பயன்பாடுகளுக்கு, நீங்கள் ஒத்திசைவற்ற கோரிக்கைகளைப் (asynchronous requests) பயன்படுத்தி ஒரே நேரத்தில் பல கோரிக்கைகளைச் செய்யலாம். பல API-களிலிருந்து ஒரே நேரத்தில் தரவை மீட்டெடுப்பது போன்ற I/O-சார்ந்த பணிகளைக் கையாளும் போது இது செயல்திறனை கணிசமாக மேம்படுத்தும். `requests` நூலகம் ஒத்திசைவானது (synchronous) என்றாலும், ஒத்திசைவற்ற தன்மையை அடைய நீங்கள் அதை `asyncio` மற்றும் `aiohttp` போன்ற ஒத்திசைவற்ற நூலகங்களுடன் இணைக்கலாம்.
அமர்வுகளுடன் `aiohttp` ஐப் பயன்படுத்தி ஒத்திசைவற்ற கோரிக்கைகளைச் செய்வதற்கான எடுத்துக்காட்டு இங்கே:
import asyncio
import aiohttp
async def fetch_url(session, url):
try:
async with session.get(url) as response:
return await response.text()
except Exception as e:
print(f"Error fetching {url}: {e}")
return None
async def main():
async with aiohttp.ClientSession() as session:
urls = [
'https://www.example.com',
'https://www.google.com',
'https://www.python.org'
]
tasks = [fetch_url(session, url) for url in urls]
results = await asyncio.gather(*tasks)
for i, result in enumerate(results):
if result:
print(f"Content from {urls[i]}: {result[:100]}...")
else:
print(f"Failed to fetch {urls[i]}")
if __name__ == "__main__":
asyncio.run(main())
அமர்வு மேலாண்மை சிக்கல்களை சரிசெய்தல்
அமர்வு மேலாண்மை HTTP இணைப்பு மறுபயன்பாட்டை எளிதாக்கினாலும், சில சூழ்நிலைகளில் உங்களுக்கு சிக்கல்கள் ஏற்படலாம். சில பொதுவான சிக்கல்களும் அவற்றுக்கான தீர்வுகளும் இங்கே:
- இணைப்புப் பிழைகள்:
ConnectionErrorஅல்லதுMax retries exceededபோன்ற இணைப்புப் பிழைகளை நீங்கள் எதிர்கொண்டால், உங்கள் பிணைய இணைப்பு, ஃபயர்வால்கள் மற்றும் சர்வர் கிடைக்கும் தன்மையை சரிபார்க்கவும். உங்கள் பயன்பாடு இலக்கு ஹோஸ்டை அடைய முடியும் என்பதை உறுதிப்படுத்தவும். - நேர அளவுப் பிழைகள்: நீங்கள் நேர அளவுப் பிழைகளை எதிர்கொண்டால், நேர அளவு மதிப்பை அதிகரிக்கவும் அல்லது பதில்களைச் செயலாக்க எடுக்கும் நேரத்தைக் குறைக்க உங்கள் குறியீட்டை மேம்படுத்தவும். முக்கிய நூலை (main thread) தடுப்பதைத் தவிர்க்க ஒத்திசைவற்ற கோரிக்கைகளைப் (asynchronous requests) பயன்படுத்துவதைக் கருத்தில் கொள்ளவும்.
- குக்கீ சிக்கல்கள்: குக்கீகள் நிலைநிறுத்தப்படாமல் அல்லது சரியாக அனுப்பப்படாமல் சிக்கல்களை எதிர்கொண்டால், குக்கீ அமைப்புகள், டொமைன் மற்றும் பாதை ஆகியவற்றைச் சரிபார்க்கவும். சர்வர் குக்கீகளை சரியாக அமைக்கிறது என்பதையும், உங்கள் பயன்பாடு அவற்றை சரியாகக் கையாளுகிறது என்பதையும் உறுதிப்படுத்தவும்.
- நினைவக கசிவுகள் (Memory Leaks): நீங்கள் நினைவக கசிவுகளை எதிர்கொண்டால், நீங்கள் அமர்வுகளை வெளிப்படையாக மூடுவதையும், வளங்களை சரியாக விடுவிப்பதையும் உறுதிப்படுத்தவும். சாத்தியமான சிக்கல்களைக் கண்டறிய உங்கள் பயன்பாட்டின் நினைவக பயன்பாட்டைக் கண்காணிக்கவும்.
- SSL சான்றிதழ் பிழைகள்: நீங்கள் SSL சான்றிதழ் பிழைகளை எதிர்கொண்டால், உங்களிடம் சரியான SSL சான்றிதழ்கள் நிறுவப்பட்டு உள்ளமைக்கப்பட்டுள்ளதா என்பதை உறுதிப்படுத்தவும். சோதனை நோக்கங்களுக்காக SSL சான்றிதழ் சரிபார்ப்பை நீங்கள் முடக்கலாம், ஆனால் இது உற்பத்தி சூழல்களுக்கு (production environments) பரிந்துரைக்கப்படுவதில்லை.
அமர்வு மேலாண்மைக்கான உலகளாவிய பரிசீலனைகள்
- புவியியல் இருப்பிடம்: உங்கள் பயன்பாட்டிற்கும் சர்வருக்கும் இடையிலான உடல் தூரம் தாமதத்தை (latency) கணிசமாக பாதிக்கும். வெவ்வேறு புவியியல் பிராந்தியங்களில் உள்ள பயனர்களுக்கு உள்ளடக்கத்தை அருகாமையில் தேக்கி வைக்க (cache) ஒரு உள்ளடக்க விநியோக வலையமைப்பைப் (CDN - Content Delivery Network) பயன்படுத்துவதைக் கருத்தில் கொள்ளவும்.
- பிணைய நிலைமைகள்: பிணைய நிலைமைகள், அலைவரிசை (bandwidth) மற்றும் பாக்கெட் இழப்பு (packet loss) போன்றவை வெவ்வேறு பிராந்தியங்களில் கணிசமாக மாறுபடும். மோசமான பிணைய நிலைமைகளை மென்மையாகக் கையாள உங்கள் பயன்பாட்டை மேம்படுத்தவும்.
- நேர மண்டலங்கள்: குக்கீகள் மற்றும் அமர்வு காலாவியைக் கையாளும் போது, நேர மண்டலங்கள் குறித்து கவனமாக இருங்கள். நேர மண்டல மாற்றங்கள் தொடர்பான சிக்கல்களைத் தவிர்க்க UTC காலமுத்திரைகளைப் (timestamps) பயன்படுத்தவும்.
- தரவு தனியுரிமை விதிமுறைகள்: GDPR மற்றும் CCPA போன்ற தரவு தனியுரிமை விதிமுறைகள் குறித்து அறிந்திருங்கள், மேலும் உங்கள் பயன்பாடு இந்த விதிமுறைகளுக்கு இணங்குவதை உறுதிசெய்யவும். குக்கீகள் மற்றும் அமர்வுகளில் சேமிக்கப்பட்ட முக்கியமான தரவைப் பாதுகாக்கவும்.
- உள்ளூர்மயமாக்கல்: வெவ்வேறு மொழிகள் மற்றும் கலாச்சாரங்களை ஆதரிக்க உங்கள் பயன்பாட்டை உள்ளூர்மயமாக்குவதைக் (localizing) கருத்தில் கொள்ளவும். இதில் பிழை செய்திகளை மொழிபெயர்ப்பது மற்றும் உள்ளூர்மயமாக்கப்பட்ட குக்கீ ஒப்புதல் அறிவிப்புகளை வழங்குவது ஆகியவை அடங்கும்.
முடிவுரை
Requests அமர்வு மேலாண்மை HTTP இணைப்பு மறுபயன்பாட்டை மேம்படுத்துவதற்கும், உங்கள் பயன்பாடுகளின் செயல்திறனை மேம்படுத்துவதற்கும் ஒரு சக்திவாய்ந்த நுட்பமாகும். அமர்வு பொருள்கள், அடாப்டர்கள், இணைப்பு குளம் மற்றும் பிற உள்ளமைவு விருப்பங்களின் நுணுக்கங்களைப் புரிந்துகொள்வதன் மூலம், பல்வேறு சூழ்நிலைகளில் உகந்த செயல்திறனுக்காக உங்கள் பயன்பாட்டை நீங்கள் சரிசெய்யலாம். அமர்வு மேலாண்மைக்கான சிறந்த நடைமுறைகளைப் பின்பற்றவும் மற்றும் உலகளாவிய பயனர்களுக்கான பயன்பாடுகளை உருவாக்கும் போது உலகளாவிய காரணிகளைக் கருத்தில் கொள்ளவும் நினைவில் கொள்ளுங்கள். அமர்வு மேலாண்மையில் தேர்ச்சி பெறுவதன் மூலம், நீங்கள் வேகமான, திறமையான மற்றும் அளவிடக்கூடிய பயன்பாடுகளை உருவாக்கலாம், அவை சிறந்த பயனர் அனுபவத்தை வழங்கும்.
requests நூலகத்தின் அமர்வு மேலாண்மை திறன்களைப் பயன்படுத்துவதன் மூலம், டெவலப்பர்கள் தாமதத்தை கணிசமாகக் குறைக்கவும், சர்வர் சுமையைக் குறைக்கவும், உலகளாவிய வரிசைப்படுத்தல் மற்றும் பல்வேறு பயனர் தளங்களுக்கு ஏற்ற வலுவான, உயர்-செயல்திறன் பயன்பாடுகளை உருவாக்கவும் முடியும்.